/**
 * Author : Jorge Mejuto Create : 19/05/2009
 */

package net.eyra.negocio.dao;

import net.eyra.negocio.entidades.gestion.Acceso;
import net.eyra.negocio.entidades.gestion.Usuario;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

public class UsuarioDao {

    /**
     * Además del usuario y clave comprueba que el usuario esté activo.
     * 
     * @param usuario
     * @param clave
     * @return
     * @throws EyraDaoException
     */
    public Usuario CargarUsuario(String usuario, String clave) throws EyraDaoException {
        Session session = null;
        Usuario _usuario = null;
        try {
            session = HibernateUtil.getSession();
            _usuario = (Usuario) session.createCriteria(Usuario.class)
                    .add(Restrictions.eq("activo", "S"))
                    .add(Restrictions.eq("usuario", usuario.trim().toUpperCase()))
                    .add(Restrictions.eq("clave", clave))
                    .uniqueResult();
        } catch (HibernateException e) {
            if (session != null) session.beginTransaction().rollback();
            throw new EyraDaoException(e);
        } finally {
            if (session != null && session.isOpen()) session.close();
        }
        return _usuario;
    }

    public void ActualizarUsuario(Usuario usuario) throws EyraDaoException {
        Session session = null;
        try {
            session = HibernateUtil.getSession();
            session.beginTransaction().begin();
            session.saveOrUpdate(usuario);
            session.flush();
            session.beginTransaction().commit();
        } catch (HibernateException e) {
            if (session != null) session.beginTransaction().rollback();
            throw new EyraDaoException(e);
        } finally {
            if (session != null && session.isOpen()) session.close();
        }
    }

    public void setAccesoUsuario(Acceso acceso) throws EyraDaoException {
        Session session = null;
        try {
            session = HibernateUtil.getSession();
            session.beginTransaction().begin();
            session.save(acceso);
            session.flush();
            session.beginTransaction().commit();
        } catch (HibernateException e) {
            if (session != null) session.beginTransaction().rollback();
            throw new EyraDaoException(e);
        } finally {
            if (session != null && session.isOpen()) session.close();
        }
    }
}
